/*
 * om gebruik te maken van de PDF creator moet de itext jar als library ingeladen worden dmv rechter muis klik op de Libraries --> add JAR/Folder
 */
package view;

import Model.FactuurMember;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import java.io.*;
import com.itextpdf.text.pdf.PdfWriter;
import java.util.*;
import model.BarBon;

/**
 *
 * @author bart.wolvers
 */
public class CreatePdfFactuur {
    /*
     * Hieronder worden een paar static varialen aangemaakt: FILE = Hier wordt
     * het pad naar de PDF inggegeven catFont, redFont,subFont,smallBold, zijn
     * verschillende tekst fonts die gebruikt kunnen worden.
     */

    private static Font catFont = new Font(Font.FontFamily.TIMES_ROMAN, 22,
            Font.BOLD);
    private static Font redFont = new Font(Font.FontFamily.TIMES_ROMAN, 12,
            Font.NORMAL, BaseColor.RED);
    private static Font subFont = new Font(Font.FontFamily.TIMES_ROMAN, 16,
            Font.BOLD);
    private static Font smallBold = new Font(Font.FontFamily.TIMES_ROMAN, 12,
            Font.BOLD);
    //Even een Barlid arraylist je maken en dat moet op deze manier met 
    //java.util ervoor ivm een andere classen in de itext die ook List heet.
    // tevens een double voor het totaal bedrag
    java.util.List<BarBon> bon = new ArrayList<BarBon>();
    // java.util.List<Course> cursus = new ArrayList<Course>();
    FactuurMember lid;
    private double totaal = 0;

    /**
     * Hier begint het creeën van de PDF
     *
     * @param lid een arraylist van het object Barlid moet meegegeven worden
     * @param totaal het totaal edrag in double moet ook meet gegeven worden.
     */
    public CreatePdfFactuur(FactuurMember lid, java.util.List<BarBon> bon) {
        this.bon = bon;
        //this.cursus = cursus;
        this.lid = lid;


        System.out.println("factuurnummer in create PDF: " + lid.getFactuurNummer());
        String FILE = "src/printing/fitshapefactuur" + lid.getFactuurNummer() + ".pdf";

        try {

            Document document = new Document();
            PdfWriter.getInstance(document, new FileOutputStream(FILE));
            document.open();
            addMetaData(document);
            addContent(document);
            document.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // Via deze methode wordt meteadata toegevoegd aan het PDF docement
    // iText allows to add metadata to the PDF which can be viewed in your Adobe
    // Reader
    // under File -> Properties

    private static void addMetaData(Document document) {
        document.addTitle("Factuur");
        document.addSubject(new Date().toString());
        document.addKeywords("Factuur, facuren,Lid, product");
        document.addAuthor("Team 2");
        document.addCreator("Team 2");

    }

    //Hieronder wordt het PDF document gevuld
    private void addContent(Document document) throws DocumentException {
        //Tabel aanmaken tbv top image
        PdfPTable table = new PdfPTable(1);

        try {
            Image header = Image.getInstance("src/images/FitShape_Logo_Small.png");
            header.scaleAbsolute(169f, 91f);
//scaleAbsolute()
//scaleAbsoluteWidth()
//scaleAbsoluteHeight()
//scalePercentage()
//scaleToFit()
            table.addCell(header);

        } catch (IOException ioex) {
            System.out.println("Error tijdens het inladen van het header image " + ioex);
        }

        // Hieorder worden de verschillende onderedelen aangemaakt als paragrafen.
        Paragraph preface = new Paragraph();
        preface.add(table);


        //Tabbel aanmaken voor de factuur gegevens en klant gegevens
        PdfPTable tableLid = new PdfPTable(2);

        // paragraafje maken voor de factuur gegevens
        Paragraph prefaceheader = new Paragraph();
        prefaceheader.add(new Paragraph("Klantnummer:\t " + lid.getMemberId() + "\n", subFont));
        prefaceheader.add(new Paragraph("Factuur datum:\t " + lid.getFactuurDatum() + "\n", subFont));
        prefaceheader.add(new Paragraph("Factuurnummer:\t " + lid.getFactuurNummer() + "\n", subFont));

        //zet de gegvens in de linker cel  
        tableLid.addCell(prefaceheader);

        // paragraafje maken voor de lid gegevens
        String naam = lid.getFirstname() + " " + lid.getMiddlename() + " " + lid.getLastname();
        Paragraph prefacelid = new Paragraph();
        prefacelid.add(new Paragraph(naam + "\n", subFont));
        prefacelid.add(new Paragraph(lid.getAddress() + "\n", subFont));
        prefacelid.add(new Paragraph(lid.getZip_code() + " " + lid.getResidence(), subFont));

        tableLid.addCell(prefacelid);

        preface.add(tableLid);
        preface.add(new Paragraph("\n"));
        preface.add(new Paragraph("Factuur", catFont));



        preface.add(new Paragraph());
        preface.add(new Paragraph("\n"));
        createTable(preface);

        document.add(preface);


    }
    // Hieonder wordt een tabel gemaakt deze is nodig voor de order lijst

    private void createTable(Paragraph subCatPart)
            throws BadElementException {
        PdfPTable table = new PdfPTable(4);

        PdfPCell c1 = new PdfPCell(new Phrase("Aantal"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("Productnaam"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("Prijs per stuk"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        table.addCell(c1);

        c1 = new PdfPCell(new Phrase("Prijs Totaal"));
        c1.setHorizontalAlignment(Element.ALIGN_CENTER);
        table.addCell(c1);



        table.setHeaderRows(1);
        // conversie fload naar string tbv abonnement prijst
        String strabonementprijs = Double.toString(lid.getAbonnementprijs());
        table.addCell("1");
        table.addCell(lid.getAbonnement());
        table.addCell(" ");
        table.addCell("\u20AC "+strabonementprijs);
        totaal = totaal + lid.getAbonnementprijs();

        //loopt door de lid array heen en zet de waarde in een cel
        // omdat hier alleen maar een String in gaat wordt de double geconveteerd naar string via prijsp

        for (int i = 0; i < bon.size(); ) {

            //Kleine berekening voor de prijs en totalen
            double prijs = bon.get(i).getPrijsproduct() * bon.get(i).getAantal();
            //totaal even updaten
            totaal = totaal + prijs;
            String strprijs = Double.toString(prijs);
            String straantal = Integer.toString(bon.get(i).getAantal());
            String strprijsperstuk = Double.toString(bon.get(i).getPrijsproduct());

            //nu de cellen vullen me waardes
            table.addCell(straantal);
            table.addCell(bon.get(i).getProductnaam());
            table.addCell(strprijsperstuk);
            table.addCell("\u20AC "+ strprijs);
            i++;
        }

//        for (int i = 0; i < cursus.size(); i++){
//          String curususprijs = Double.toString(cursus.get(i).getPrijs());
//          table.addCell(" ");
//          table.addCell(cursus.get(i).getCursusnaam());
//          table.addCell(" ");
//          table.addCell(curususprijs);
//          //totaal even updaten        
//          totaal = totaal + cursus.get(i).getPrijs();
//                   }


        table.addCell("");
        table.addCell("");
        table.addCell("");
        table.addCell("");
        table.addCell("");
        table.addCell("");
        System.out.println("Totaal " + totaal);
        table.addCell(new Paragraph("Totaal:", subFont));
        String strtotaal = Double.toString(totaal);
        System.out.println("String totaal: \u20AC " + strtotaal);
        table.addCell(new Paragraph("\u20AC " +strtotaal, subFont));
        subCatPart.add(table);

    }
}
